ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseオペレーション・ガイド
リリース7.0
E05167-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

チェックポイント

チェックポイントとは、データ・ストアの状態をディスク・ファイル(チェックポイント・ファイル)に保存する処理のことです。デフォルトでは、TimesTenはバックグラウンドのチェックポイント処理を一定間隔で実行します。かわりに、アプリケーションでプログラムによってチェックポイント処理を開始することもできます。詳細は、「チェックポイントの設定および管理」を参照してください。

TimesTenでは、データ・ストアごとにdsname.ds0およびdsname.ds1の2つのチェックポイント・ファイルがあります。ここで、dsnameは、データ・ストアのDSNで指定されるデータ・ストア・パス名です。チェックポイント処理では、前回のチェックポイントが書き込まれたチェックポイント・ファイルが識別され、他方のチェックポイント・ファイルにチェックポイントが書き込まれます。したがって、これらの2つのファイルには、常に最新のデータ・ストア・イメージおよびその1つ前のデータ・ストア・イメージのいずれかが含まれていることになります。

データ・ストアがシャットダウンするか、またはシステム障害が発生した後で行われるデータ・ストアのリカバリでは、これらのファイルを使用して、トランザクションに一貫性がある最新のデータ・ストア状態がリカバリされます。このリカバリでは、2つのチェックポイント・イメージの中で新しい方のイメージが含まれているファイルが識別され、そのファイルのデータ・ストア・イメージにログが適切に適用されて、最新のデータ・ストアの状態がリカバリされます。この処理中にエラーが発生した場合、または新しい方のチェックポイント・イメージが不完全な場合(チェックポイントの書込み開始時にシステム障害が発生した場合など)は、もう一方のチェックポイント・ファイルを使用してリカバリが再度開始されます。

また、TimesTenでは、データ・ストアごとにdsName.res0ファイルおよびdsName.res1ファイルも作成されます。これらのファイルは、ログの作成時にTimesTenによって内部的に使用されます。

チェックポイント処理には、2つの主な目的があります。その1つは、リカバリの開始時により新しいデータ・ストア・イメージを提供して、データ・ストアのリカバリに必要な時間を短縮することです。もう1つは、ログの一部を将来のデータ・ストアのリカバリ処理で不要にすることです(通常は、これで1つ以上のログ・ファイルを削除できます)。これらの2つの機能は、TimesTenアプリケーションにとって非常に重要です。リカバリ時間の短縮は、データ・ストアのリカバリに必要なログの量が、システム障害の発生後にアプリケーションで発生するダウンタイムに直接影響するため重要になります。不要なログ・ファイルの削除は、新しいログ・ファイルで使用可能なディスク領域を解放できるため重要になります。これらのファイルが削除されない場合、最終的に、ログ・ディレクトリのファイル・システムで使用可能なすべての領域がすべてこれらのファイルによって消費され、データ・ストア処理が、ログ領域不足のため失敗することになります。

これらの理由から、TimesTenアプリケーションでデータ・ストアを定期的にチェックポイント処理するか、あるいはユーザーがデータ・ストアの初期接続属性CkptFrequencyまたはCkptLogVolumeを設定して、チェックポイント処理がバックグラウンドで実行される頻度を決定する必要があります。

チェックポイント処理の実行時、データ・ストアのサイズおよび最新のチェックポイント以降に行われたデータ・ストアへの変更の回数に応じて、大量のI/Oアクティビティが発生し、実行時間が長くなる場合があります。

チェックポイントのタイプ

TimesTenでは、次の2つのタイプのデータ・ストア・チェックポイントがサポートされています。

トランザクション一貫性チェックポイント

トランザクション一貫性チェックポイント(ブロッキング・チェックポイントとも呼ばれる)では、チェックポイント処理の一部でデータ・ストアに排他ロックが設定され、その間はデータ・ストアへのアクセスがブロックされます。その結果、得られるチェックポイント・イメージには、チェックポイント処理でロックを設定する前にコミットされたすべてのトランザクションの結果が反映されます。データ・ストア・ロックが保持されている間はアクティブなトランザクションが許容されないため、実行中のトランザクションで行われた変更はチェックポイント・イメージに含まれません。

トランザクション一貫性チェックポイントは、いずれのロギング・モード(ディスク・ロギングおよびロギングなし)でも使用できます。ディスク・ロギングが有効な場合は、リカバリ時にログが使用され、チェックポイント処理の終了後に永続コミットされたトランザクションの結果が再度適用されます。トランザクション一貫性チェックポイントをリクエストするには、アプリケーションでttCkptBlocking組込みプロシージャを使用します。実際のチェックポイント処理は、リクエストを行ったトランザクションがコミットまたはロールバックされてから実行されます。両方のチェックポイント・ファイルがすでに最新となっているデータ・ストアに対してトランザクション一貫性チェックポイントをリクエストすると、そのリクエストは無視されます。

ファジー・チェックポイント(非ブロッキング・チェックポイント)

ファジー・チェックポイント(非ブロッキング・チェックポイント)では、チェックポイント処理の実行中にデータ・ストアに対してトランザクションを実行できます。ファジー・チェックポイントでは、ロックは設定されません。このため、他のデータ・ストア・アクティビティへの影響は最小限になります。これらの他のデータ・ストア・アクティビティは、チェックポイント・ファイルに書込み中のデータ・ストアも変更できるため、作成されるチェックポイント・イメージには、チェックポイント処理の実行中にアクティブだったトランザクションの結果が含まれる場合があります。また、チェックポイント・イメージの全体に、同一時点の状態が反映されているとはかぎりません。たとえば、ある部分は、あるトランザクションのコミット前に書き込まれ、別の部分は、コミット後に書き込まれる場合があります。ファジー・チェックポイントという用語は、データ・ストア・イメージの状態がファジー(あいまい)であることから名付けられています。TimesTenのバックグラウンドのチェックポイントは、常に非ブロッキングです。

ファジー・チェックポイントからのリカバリでは、TimesTenは、ログを使用してチェックポイントの様々な部分を互いに一貫性がある状態にし、チェックポイント処理の終了後に永続コミットされたトランザクションの結果を再度適用します。このため、ファジー・チェックポイントは、ディスク・ロギングが有効になっている場合にのみ使用できます。ファジー・チェックポイントをリクエストするには、アプリケーションでttCkpt組込みプロシージャを使用します。ディスク・ロギングが有効になっている場合は、このプロシージャによってファジー・チェックポイントが発行されます。ロギングが無効になっている場合は、ブロッキング・チェックポイント(トランザクション一貫性チェックポイント)がリクエストされます。すべてのブロッキング・チェックポイントの場合と同様に、実際のチェックポイント処理は、リクエストを行ったトランザクションがコミットまたはロールバックされてから実行されます。

チェックポイントの設定および管理

デフォルトでは、Logging=1の場合、TimesTenは非ブロッキング・チェックポイントをバックグラウンドで実行します。この場合のバックグラウンドのチェックポイント処理は、非ブロッキングです(「ファジー・チェックポイント(非ブロッキング・チェックポイント)」を参照してください)。

一部のデータ・ストア属性および組込みプロシージャをチェックポイントの設定、管理および監視に使用できます。これらには、次のものがあります。

また、TimesTenでは、RAMポリシーが「always」でないかぎり、最後のアプリケーションがデータ・ストアから切断されたときも、トランザクション一貫性チェックポイントが自動的に実行されます。Logging=1が設定された一時データ・ストアの場合も、チェックポイントが確認されてログ・ファイルがパージされます。非ディスク・ロギングが有効になっている一時データ・ストアの場合、バックグラウンドのチェックポイント処理は無効になっています。「トランザクション一貫性チェックポイント」を参照してください。

また、アプリケーションで組込みプロシージャttCkptまたはttCkptBlockingを使用すると、チェックポイント処理をプログラムで実行できます。ttCkptなどのTimesTen組込みプロシージャをCまたはJavaプログラムからコールする方法の詳細は、『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』のCアプリケーションからのTimesTen組込みプロシージャのコールに関する説明、または『Oracle TimesTen In-Memory Database Java開発者およびリファレンス・ガイド』のTimesTen組込みプロシージャのコールに関する説明を参照してください。

デフォルトでは、TimesTenはバックグラウンドのチェックポイント処理を一定間隔で実行します。バックグラウンドのチェックポイント処理の実行中にアプリケーションでチェックポイント処理の実行を試行すると、TimesTenからアプリケーションにエラーが戻されます。バックグラウンドのチェックポイント処理を無効にするには、CkptFrequency=0およびCkptLogVolume=0.を設定します。また、組込みプロシージャttCkptConfigを使用して、バックグラウンドのチェックポイント処理を構成するか、または無効にすることもできます。ttCkptConfigで設定された値は、データ・ストア属性で設定された値より優先されます。

これらの属性および組込みプロシージャを使用すると、チェックポイント処理を実行するタイミングをログ・ファイルのデータが特定の量に達した時点または特定の頻度に設定できます。デフォルト値および使用方法の詳細は、『Oracle TimesTen In-Memory Database APIリファレンス・ガイド』を参照してください。

バックグラウンドのチェックポイント処理の実行中にアプリケーションでデータ・ストアのバックアップを試行すると、TimesTenは、チェックポイント処理が終了してからバックアップが開始されるまでの間待機します。バックグラウンドのチェックポイント処理は、バックアップの実行中に開始されると、バックアップが終了するまで実行されません。アプリケーションで開始されたチェックポイント処理の実行中にバックグラウンドのチェックポイント処理が開始されると、エラーが戻されます。

ttCkptHistory組込みプロシージャを使用すると、最後の8個のチェックポイント履歴、チェックポイント処理頻度とログ・ボリュームの設定、および実行中のチェックポイント処理によるディスクへの書込みのステータスを表示できます。

バックグラウンドのチェックポイント処理のチェックポイント処理速度の設定

デフォルトでは、チェックポイントがディスクに書き込まれる速度に制限はありません。速度を制御する場合は、CkptRate属性またはttCkptConfig組込みプロシージャを使用して、バックグラウンドでチェックポイントがディスクに書き込まれる最大速度を設定できます。速度は、MB/秒で表されます。リカバリ時に行われるチェックポイント処理および最後のチェックポイント処理ではこの速度は保持されません。この場合の速度に制限はありません。

これらの機能の詳細は、『Oracle TimesTen In-Memory Database APIリファレンス・ガイド』を参照してください。

速度を低く設定しすぎると、チェックポイント処理に過度の時間がかかり、次の問題が発生する場合があります。

速度を選択する場合は、通常のチェックポイント処理で書き込まれるデータの量およびチェックポイント処理に通常かかる時間について考慮する必要があります。これらの情報は両方ともttCkptHistory組込みプロシージャを使用して入手できます。

また、ttCkptHistory結果セットのPercent_Complete列を参照して実行中のチェックポイント処理を監視できます。実行中のチェックポイント処理が遅すぎることが示されている場合は、ttCkptConfig組込みプロシージャをコールして速度を速くすることができます。ttCkptConfigをコールして速度を変更すると、新しい速度は即時に有効になり、実行中のチェックポイント処理に対しても反映されます。

チェックポイント処理速度の簡単な計算方法を次に示します。

  1. ttCkptHistory組込みプロシージャをコールします。
  2. 任意のチェックポイントに対して、終了時間から開始時間を引きます。
  3. 書き込まれたバイト数をこの経過時間(秒)で割って1秒当たりのバイト数を取得します。
  4. この数字を1024×1024で割って1秒当たりのMB数を取得します。

チェックポイント処理速度の設定時には、次のことも考慮する必要があります。